package com.itheima.dao;

import com.github.pagehelper.Page;
import com.itheima.pojo.CheckGroup;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @author wgq
 * @date 2019-10-08 14:41
 * 检查组 持久层
 */
@Repository
public interface CheckGroupDao {
    /**
     * 检查组分页查询，列表展示,根据条件查询
     * @param queryString
     * @return
     */
    Page<CheckGroup> selectByCondition(String queryString);

    /**
     *添加检查组合，
     * @param checkGroup
     */
    void addCheckGroup(CheckGroup checkGroup);

    /**
     * 设置检查组合和检查项的关联关系
     * @param map
     */
    void setCheckGroupAndCheckItem(Map<String, Integer> map);

    /**
     * 设置检查组合和检查项的关联关系
     * @param checkItemId
     * @param checkGroupId
     */
    void setGroupAndItem(@Param("checkItemId") Integer checkItemId, @Param("checkGroupId") Integer checkGroupId);

    /**
     * 根据id查看 检查组 的信息
     * @param id
     * @return
     */
    CheckGroup findById(Integer id);

    /**
     * 查看检查组和检查项之间的关联关系。返回一个数组：检查项的ID
     * @param id
     * @return
     */
    List<Integer> findItemIdsByGroupId(Integer id);

    /**
     * 编辑检查组的信息
     * @param checkGroup
     */
    void edit(CheckGroup checkGroup);

    /**
     * 删除 检查组关联的  检查组和检查项信息
     * @param id
     */
    void deleteCheckItemsIds(Integer id);

    /**
     * 删除一条 检查组
     * @param id
     */
    void deleteCheckGroup(Integer id);

    /**
     * 根据编码 code 查看 该条编辑过的数据，数据库中是否已存在
     * @param code
     * @return
     */
    Integer findByCode(String code);

    /**
     * 根据名称 name 查看 该条编辑过的数据，数据库中是否已存在
     * @param name
     * @return
     */
    Integer findByName(String name);

    /**
     * 编辑过程中，根据 修改后的name查询数据库，判断检查组名称是否已存在
     * @param checkGroup
     * @return
     */
    Integer findGroupName(CheckGroup checkGroup);

    /**
     * 查询所有检查组，用作检查组列表展示
     * @return
     */
    List<CheckGroup> findAllGroup();

    /**
     * 根据检查组 ID 查询数据库，判断当前检查组是否被套餐引用
     * @param id
     * @return
     */
    long findCountByCheckGroupId(Integer id);
}
